package com.dys.controller;

import com.dys.entity.AirQuality;
import com.dys.entity.District;
import com.dys.form.AirAddForm;
import com.dys.form.AirUpdateForm;
import com.dys.service.AirService;
import com.dys.util.R;
import com.dys.vo.ResultVO;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
 * @className: com.dys.controller.AirController
 * @description: 空气质量信息控制器
 * @author: pine cone
 * @version: v1.0.0
 * @createTime: 2024/04/08 22:31
 */
@RestController
public class AirController {

    @Autowired
    private AirService airService;


    // 方式1
    public Map districtList() {
        // 直接查询库中的district表中全部数据
        List<District> districtListData = airService.findDistrictList();
        Map result = new HashMap();
        result.put("code", 0);
        result.put("msg", "响应成功");
        result.put("data", districtListData);
        return result;
    }

    // 方式2
    public ResultVO districtList2() {
        // 直接查询库中的district表中全部数据
        List<District> districtListData = airService.findDistrictList();
        ResultVO result = new ResultVO();
        result.setCode(0);
        result.setMsg("响应成功");
        result.setData(districtListData);
        return result;
    }

    /**
     * 查询所有区域信息
     *
     * @return 所有区域信息
     */
    @GetMapping("/district/list")
    public ResultVO listAllDistrict() {
        // 直接查询库中的district表中全部数据
        List<District> districtListData = airService.findDistrictList();
        return R.ok(districtListData);
    }

    /**
     * 分页 & 条件查询所有空气质量信息
     *
     * @param page       当前页
     * @param size       每页显示条数
     * @param districtId 区域编号
     * @return 所有空气质量信息
     */
    @GetMapping("/air/list")
    public ResultVO listAllAirData(@RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "5") Integer size, Integer districtId) {
        PageInfo<List<AirQuality>> pageInfo = airService.findAirByDistrictIdAndPage(page, size, districtId);
        return R.ok(pageInfo.getTotal(), pageInfo.getList());
    }

    /**
     * 添加空气质量信息
     * 业务流程：
     * 1.接收参数
     * 2.做参数的非空校验
     * 3.数据添加到数据库
     *
     * @param airAddForm 待添加的空气质量信息
     * @return 添加成功 or 添加失败 的描述
     */
    @PostMapping("/air/add")
    public ResultVO addAirData(@Valid @RequestBody AirAddForm airAddForm, BindingResult result) {
        // 1.查看参数是否合法
        if (result.hasErrors()) {
            // 有参数不满足要求
            String message = Objects.requireNonNull(result.getFieldError()).getDefaultMessage();
            // 返回参数不合法的信息
            return R.error(400, message);
        }

        // 2.调用service层加数据
        airService.add(airAddForm);

        // 3.添加成功
        return R.ok("添加成功");
    }

    /**
     * 修改空气质量信息
     *
     * @param air 待修改的空气质量信息
     * @return 修改成功 or 修改失败 的描述
     */
    @PutMapping("/air/update")
    public ResultVO updateAirData(@RequestBody AirUpdateForm air) {
        // 1.接收参数
        Integer id = air.getId();
        if (id == null) {
            return R.error(400, "参数不合法");
        }

        // 2.找service修改数据
        airService.updateById(air);

        // 3.返回
        return R.ok("修改成功");
    }

    /**
     * 删除空气质量信息
     *
     * @param id 待删除的空气质量信息id
     * @return 删除成功 or 删除失败 的描述
     */
    @DeleteMapping("/air/delete/{id}")
    public ResultVO deleteAirData(@PathVariable Integer id) {
        // 1.调用service删除
        airService.deleteById(id);

        // 2.响应数据
        return R.ok("删除成功");
    }
}
